]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
UserMenu: show "Install Updates & Restart" when appropriate
authorGiovanni Campagna <gcampagna@src.gnome.org>
Sun, 3 Jun 2012 15:35:37 +0000 (17:35 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Sat, 7 Jul 2012 16:21:35 +0000 (18:21 +0200)
When PackageKit signals that it prepared an update, offer an option
to reboot and apply it, using a helper that will setup the next
reboot and then calling to gnome-session.

https://bugzilla.gnome.org/show_bug.cgi?id=677394

js/misc/gnomeSession.js
js/ui/userMenu.js

index dabd1b19c5f3c5521bc074a1ff70fc37d9902c9d..f8bd58eb8cfcdbf5947113a1e2fd86458621ac74 100644 (file)
@@ -50,6 +50,7 @@ const SessionManagerIface = <interface name="org.gnome.SessionManager">
     <arg type="u" direction="in" />
 </method>
 <method name="Shutdown" />
+<method name="Reboot" />
 <method name="CanShutdown">
     <arg type="b" direction="out" />
 </method>
index 4dd9057d4412988f5c1a195b458484ec50c863f1..f8a57d2dc86774acae7e6ca274e0ff04de6525d1 100644 (file)
@@ -523,6 +523,10 @@ const UserMenuButton = new Lang.Class({
         this._updateLogout();
         this._updateLockScreen();
 
+        this._updatesFile = Gio.File.new_for_path('/var/lib/PackageKit/prepared-update');
+        this._updatesMonitor = this._updatesFile.monitor(Gio.FileMonitorFlags.NONE, null);
+        this._updatesMonitor.connect('changed', Lang.bind(this, this._updateInstallUpdates));
+
         // Whether shutdown is available or not depends on both lockdown
         // settings (disable-log-out) and Polkit policy - the latter doesn't
         // notify, so we update the menu item each time the menu opens or
@@ -578,11 +582,17 @@ const UserMenuButton = new Lang.Class({
         this._lockScreenItem.actor.visible = allowLockScreen;
     },
 
+    _updateInstallUpdates: function() {
+        let haveUpdates = this._updatesFile.query_exists(null);
+        this._installUpdatesItem.actor.visible = haveUpdates && this._haveShutdown;
+    },
+
     _updateHaveShutdown: function() {
         this._session.CanShutdownRemote(Lang.bind(this,
             function(result, error) {
                 if (!error) {
                     this._haveShutdown = result[0];
+                    this._updateInstallUpdates();
                     this._updateSuspendOrPowerOff();
                 }
             }));
@@ -711,6 +721,11 @@ const UserMenuButton = new Lang.Class({
         item = new PopupMenu.PopupSeparatorMenuItem();
         this.menu.addMenuItem(item);
 
+        item = new PopupMenu.PopupMenuItem(_("Install Updates & Restart"));
+        item.connect('activate', Lang.bind(this, this._onInstallUpdatesActivate));
+        this.menu.addMenuItem(item);
+        this._installUpdatesItem = item;
+
         item = new PopupMenu.PopupAlternatingMenuItem(_("Power Off"),
                                                       _("Suspend"));
         this.menu.addMenuItem(item);
@@ -769,6 +784,13 @@ const UserMenuButton = new Lang.Class({
         this._session.LogoutRemote(0);
     },
 
+    _onInstallUpdatesActivate: function() {
+        Main.overview.hide();
+        Util.spawn(['pkexec', '/usr/libexec/pk-trigger-offline-update']);
+
+        this._session.RebootRemote();
+    },
+
     _onSuspendOrPowerOffActivate: function() {
         Main.overview.hide();